package com.walrusone.skywars.game; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Color; import org.bukkit.Effect; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.block.Block; import org.bukkit.block.Chest; import org.bukkit.block.DoubleChest; import org.bukkit.entity.Entity; import org.bukkit.entity.Firework; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager; import org.bukkit.util.Vector; import com.walrusone.skywars.SkyWarsReloaded; import com.walrusone.skywars.api.GameEndEvent; import com.walrusone.skywars.utilities.BungeeUtil; import com.walrusone.skywars.utilities.EmptyChest; import com.walrusone.skywars.utilities.GlassColor; import com.walrusone.skywars.utilities.Messaging; import com.walrusone.skywars.utilities.StringUtils; public class Game { private List<GamePlayer> gPlayers = new ArrayList<GamePlayer>(); private List<GamePlayer> spectators = new ArrayList<GamePlayer>(); private Map<GamePlayer, Integer> kills = new HashMap<GamePlayer, Integer>(); private boolean forceEnd = false; private int fireworksCount = 0; private int count = 0; private int gameLength = 0; private boolean thunderStorm = false; private int nextStrike = 5; private int strikeCounter = 0; private int sanityChecker = 0; private GameState gameState; private String mapName; private World mapWorld; private GameMap gameMap; private int gameNumber; private Scoreboard scoreboard; private Objective objective; private int min; private int max; private int minPlayers; private int numberOfSpawns; private boolean shutdown = false; private Map<Integer, GamePlayer> availableSpawns = new HashMap<Integer, GamePlayer>(); private Map<String, Integer> scoreboardData = new HashMap<String, Integer>(); private Location specSpawn; public Game(int gameNumber, String map) { this.gameNumber = gameNumber; if (SkyWarsReloaded.getCfg().signJoinMode()) { mapName = map; } int size = SkyWarsReloaded.getCfg().getMaxMapSize()/2; min = 0 - size; max = 0 + size; if (SkyWarsReloaded.getCfg().getSpawn() == null) { SkyWarsReloaded.get().getLogger().info("YOU MUST SET SPAWN IN THE LOBBY WORLD WITH /SWR SETSPAWN BEFORE STARTING A GAME"); endGame(); } gameState = GameState.PREGAME; getGameMap(); getScoreBoard(); } private void getGameMap() { if (!SkyWarsReloaded.getCfg().signJoinMode()) { ArrayList<String> shuffleMaps = SkyWarsReloaded.getMC().getMaps(); Collections.shuffle(shuffleMaps); int numberOfMaps = shuffleMaps.size(); int random = (int)(Math.random()*numberOfMaps) + 1; mapName = shuffleMaps.get(random-1); } gameMap = SkyWarsReloaded.getMC().getMap(mapName); boolean gameLoad = gameMap.loadMap(this.gameNumber); mapWorld = SkyWarsReloaded.get().getServer().getWorld(mapName + "_" + this.gameNumber); if (gameLoad) { numberOfSpawns = gameMap.getSpawns().size(); if (SkyWarsReloaded.getCfg().spectatingEnabled()) { double x = gameMap.getSpawns().get(1).getX()+0.5; double y = gameMap.getSpawns().get(1).getY(); double z = gameMap.getSpawns().get(1).getZ()+0.5; specSpawn = new Location(mapWorld, x, y, z); } minPlayers = (int) (numberOfSpawns * SkyWarsReloaded.getCfg().getMinPercentPlayers()/100); if (minPlayers < 1) { minPlayers = 1; } for (int i = 1; i <= numberOfSpawns; i++) { availableSpawns.put(i, null); } createSpawnPlatform(); } else { endGame(); } } public void addPlayer(GamePlayer gPlayer) { if (gPlayers.size() >= numberOfSpawns || gPlayers.contains(gPlayer)) { return; } else { if (gPlayer.getP() != null) { gPlayers.add(gPlayer); kills.put(gPlayer, 0); gPlayer.setGame(gameNumber); gPlayer.setInGame(true); if (SkyWarsReloaded.getCfg().bungeeEnabled()) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode()) { SkyWarsReloaded.getGC().updateSign(gameNumber); } SkyWarsReloaded.getInvC().add(gPlayer.getP()); preparePlayerForLobby(gPlayer); if (SkyWarsReloaded.getCfg().resetTimerEnabled()) { if (SkyWarsReloaded.getCfg().getResetTimerThreshold() >= (gPlayers.size()/numberOfSpawns)) { count = 0; } } } } } private void preparePlayerForLobby(final GamePlayer gPlayer) { Location location; int spawn = getAvailableSpawn(); location = new Location(mapWorld, gameMap.getSpawns().get(spawn).getX()+0.5, gameMap.getSpawns().get(spawn).getY(), gameMap.getSpawns().get(spawn).getZ()+0.5); availableSpawns.put(spawn, gPlayer); gPlayer.getP().teleport(location, TeleportCause.PLUGIN); SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { if (gPlayer.getP() != null) { gPlayer.getP().getInventory().clear(); gPlayer.getP().getInventory().setHelmet(null); gPlayer.getP().getInventory().setChestplate(null); gPlayer.getP().getInventory().setLeggings(null); gPlayer.getP().getInventory().setBoots(null); gPlayer.getP().setLevel(0); gPlayer.getP().setExp(0); gPlayer.getP().setHealth(20); gPlayer.getP().setFoodLevel(20); gPlayer.getP().setFlying(false); gPlayer.setOpVote(0); gPlayer.setWeatherVote(0); gPlayer.setTimeVote(0); gPlayer.setJumpVote(0); SkyWarsReloaded.getNMS().sendTitle(gPlayer.getP(), 20, 60, 20, new Messaging.MessageFormatter().setVariable("mapname", mapName).formatNoColor("titles.joinGameTitle"), SkyWarsReloaded.getMessaging().getMessage("titles.joinGameSubtitle")); for (PotionEffect effect : gPlayer.getP().getActivePotionEffects()) { gPlayer.getP().removePotionEffect(effect.getType()); } gPlayer.getP().setGameMode(GameMode.ADVENTURE); scoreboardData.put(gPlayer.getP().getName(), 1); gPlayer.getP().setScoreboard(SkyWarsReloaded.get().getServer().getScoreboardManager().getNewScoreboard()); gPlayer.getP().setScoreboard(scoreboard); updateScoreboard(); gPlayer.getP().getInventory().setItem(SkyWarsReloaded.getCfg().getExitItemSlot(), SkyWarsReloaded.getCfg().getExitGameItem()); if (SkyWarsReloaded.getCfg().optionsMenuEnabled()) { gPlayer.getP().getInventory().setItem(SkyWarsReloaded.getCfg().getOptionsItemSlot(), SkyWarsReloaded.getCfg().getOptionsItem()); } if (SkyWarsReloaded.getCfg().kitsEnabled()) { gPlayer.getP().getInventory().setItem(SkyWarsReloaded.getCfg().getKitMenuItemSlot(), SkyWarsReloaded.getCfg().getKitMenuItem()); } String color = gPlayer.getGlass(); if (color == null) { color = "normal"; } if (!color.equalsIgnoreCase("normal")) { GlassColor colorGlass = SkyWarsReloaded.getGLC().getByColor(color); if (colorGlass != null) { setGlass(colorGlass.getMaterial(), colorGlass.getData(), gPlayer); } else { setGlass(Material.GLASS, gPlayer); } } else { setGlass(Material.GLASS, gPlayer); } } } }, 5); sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("number", "" + gPlayers.size()) .setVariable("total", "" + numberOfSpawns) .setVariable("player", gPlayer.getP().getName()) .format("game.lobby-join")); playSound(SkyWarsReloaded.getCfg().getJoinSound()); } private int getAvailableSpawn() { for (int spawn: availableSpawns.keySet()) { if (availableSpawns.get(spawn) == null) { return spawn; } } return 1; } private void fillChests() { int votesForBasic = 0; int votesForNormal = 0; int votesForOP = 0; String vote = "normal"; for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getOpVote() == 1) { votesForBasic++; } else if (gPlayer.getOpVote() == 2) { votesForNormal++; } else if (gPlayer.getOpVote() == 3) { votesForOP++; } } if (votesForNormal >= votesForBasic && votesForNormal >= votesForOP) { vote = "normal"; } else if (votesForOP >= votesForBasic) { vote = "op"; } else { vote = "basic"; } for (EmptyChest eChest: gameMap.getChests().values()) { Location loc; int x = eChest.getX(); int y = eChest.getY(); int z = eChest.getZ(); loc = new Location (mapWorld, x, y, z); Chest chest = (Chest) loc.getBlock().getState(); SkyWarsReloaded.getCC().populateChest(chest, vote); } for (EmptyChest eChest: gameMap.getDoubleChests().values()) { Location loc; int x = eChest.getX(); int y = eChest.getY(); int z = eChest.getZ(); loc = new Location (mapWorld, x, y, z); Chest chest = (Chest) loc.getBlock().getState(); InventoryHolder ih = chest.getInventory().getHolder(); DoubleChest dc = (DoubleChest) ih; SkyWarsReloaded.getCC().populateDoubleChest(dc, vote); } } public void prepareForStart() { if (gameState == GameState.PREGAME) { if (gPlayers.size() >= minPlayers) { if (count == 0) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + SkyWarsReloaded.getCfg().preGameTimer()) .format("game.countdown")); } else if (count > 0 && count < SkyWarsReloaded.getCfg().preGameTimer()) { if ((SkyWarsReloaded.getCfg().preGameTimer() - count) % 5 == 0) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + (SkyWarsReloaded.getCfg().preGameTimer() - count)) .format("game.countdown-continue")); } else if ((SkyWarsReloaded.getCfg().preGameTimer() - count) < 5 ) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + (SkyWarsReloaded.getCfg().preGameTimer() - count)) .format("game.countdown-continue")); } } else if (count >= SkyWarsReloaded.getCfg().preGameTimer()) { startGame(); } count++; } else if (gPlayers.size() < minPlayers) { count = 0; } } if (gameState == GameState.PREGAME || gameState == GameState.PLAYING) { sanityChecker++; if (sanityChecker == 5) { String world = mapWorld.getName(); for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { if (!gPlayer.getP().getWorld().getName().equalsIgnoreCase(world)) { if (gPlayer.getGame() != null) { Game game = gPlayer.getGame(); if (game == this) { deletePlayer(gPlayer, true, false); } else { gPlayers.remove(gPlayer); kills.remove(gPlayer); checkForWinner(); } } else { gPlayers.remove(gPlayer); kills.remove(gPlayer); checkForWinner(); } } } else { gPlayers.remove(gPlayer); kills.remove(gPlayer); checkForWinner(); } } } else if (sanityChecker > 5) { sanityChecker = 0; } } if(thunderStorm) { if (strikeCounter == nextStrike) { int hitPlayer = getRandomNum(100, 1); if (hitPlayer <= SkyWarsReloaded.getCfg().getStrikeChance()) { int size = gPlayers.size(); Player player = gPlayers.get(getRandomNum(size-1, 0)).getP(); mapWorld.strikeLightning(player.getLocation()); } else { int x = getRandomNum(max, min); int z = getRandomNum(max, min); int y = getRandomNum(50, 20); mapWorld.strikeLightningEffect(new Location(mapWorld, x, y, z)); } nextStrike = getRandomNum(20, 3); strikeCounter = 0; } else { strikeCounter++; } } if(gameState == GameState.PLAYING && !forceEnd) { gameLength++; if ((SkyWarsReloaded.getCfg().getMaxGameLength() - gameLength) == 300) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + 5) .format("game.gameEndingTimer")); } else if ((SkyWarsReloaded.getCfg().getMaxGameLength() - gameLength) == 120) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + 2) .format("game.gameEndingTimer")); } else if ((SkyWarsReloaded.getCfg().getMaxGameLength() - gameLength) == 60) { sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("time", "" + 1) .format("game.gameEndingTimer")); } else if ((SkyWarsReloaded.getCfg().getMaxGameLength() - gameLength) <= 0) { forceEnd = true; sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .format("game.forceGameEnd")); int highest = 0; GamePlayer winner = null; for (GamePlayer gplayer: kills.keySet()) { if (kills.get(gplayer) >= highest) { winner = gplayer; } } for (GamePlayer gplayer: getPlayers()) { if (winner != gplayer) { gplayer.getP().teleport(new Location(mapWorld, 0, -64, 0), TeleportCause.PLUGIN); } } } } } public void startGame() { gameState = GameState.PLAYING; if (SkyWarsReloaded.getCfg().bungeeEnabled()) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode()) { SkyWarsReloaded.getGC().updateSign(gameNumber); } fillChests(); removeSpawnHousing(); for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { gPlayer.getP().setGameMode(GameMode.SURVIVAL); gPlayer.getP().getInventory().remove(SkyWarsReloaded.getCfg().getKitMenuItem()); gPlayer.getP().getInventory().remove(SkyWarsReloaded.getCfg().getOptionsItem()); gPlayer.getP().getInventory().remove(SkyWarsReloaded.getCfg().getExitGameItem()); gPlayer.getP().getOpenInventory().close(); gPlayer.getP().setHealth(20); gPlayer.getP().setFoodLevel(20); gPlayer.getP().addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 100, 5)); if (gPlayer.hasKitSelected()) { SkyWarsReloaded.getKC().populateInventory(gPlayer.getP().getInventory(), gPlayer.getSelectedKit()); SkyWarsReloaded.getKC().givePotionEffects(gPlayer, gPlayer.getSelectedKit()); gPlayer.setKitSelected(false); } } } if (SkyWarsReloaded.getCfg().timeVoteEnabled()) { setTime(); } if (SkyWarsReloaded.getCfg().jumpVoteEnabled()) { setJump(); } if (SkyWarsReloaded.getCfg().weatherVoteEnabled()) { setWeather(); } } public void endGame() { gameState = GameState.ENDING; if (SkyWarsReloaded.getCfg().bungeeEnabled()&& !shutdown) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode() && !shutdown) { SkyWarsReloaded.getGC().updateSign(gameNumber); } for (GamePlayer gplayer: getPlayers()) { deletePlayer(gplayer, false, false); } if (SkyWarsReloaded.getCfg().spectatingEnabled()) { for (GamePlayer gPlayer: getSpectators()) { removeSpectator(gPlayer); } } for (Player player: mapWorld.getPlayers()) { if (player != null) { player.teleport(SkyWarsReloaded.getCfg().getSpawn(), TeleportCause.PLUGIN); } } for (Entity entity: mapWorld.getEntities()) { if (entity != null) { entity.remove(); } } if (!SkyWarsReloaded.getCfg().spectatingEnabled() && !shutdown) { SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { @Override public void run() { deleteGame(); } }, 20 * SkyWarsReloaded.getCfg().getTimeAfterGame()); } else { deleteGame(); } } private void getScoreBoard() { if (scoreboard != null) { resetScoreboard(); } ScoreboardManager manager = SkyWarsReloaded.get().getServer().getScoreboardManager(); scoreboard = manager.getNewScoreboard(); objective = scoreboard.registerNewObjective("info", "dummy"); objective.setDisplaySlot(DisplaySlot.SIDEBAR); String leaderboard = new Messaging.MessageFormatter().setVariable("mapname", mapName.toUpperCase()).format("game.scoreboard-title"); objective.setDisplayName(leaderboard); } private void updateScoreboard() { if (objective != null) { objective.unregister(); } objective = scoreboard.registerNewObjective("info", "dummy"); objective.setDisplaySlot(DisplaySlot.SIDEBAR); String leaderboard = new Messaging.MessageFormatter().setVariable("mapname", mapName.toUpperCase()).format("game.scoreboard-title"); objective.setDisplayName(leaderboard); if (SkyWarsReloaded.getCfg().usePlayerNames()) { for (String name: scoreboardData.keySet()) { if (scoreboardData.get(name) == 0) { Score score = objective.getScore(ChatColor.RED + name); score.setScore(scoreboardData.get(name)); } else { Score score = objective.getScore(ChatColor.GREEN + name); score.setScore(scoreboardData.get(name)); } } } else { Score score = objective.getScore(new Messaging.MessageFormatter().format("game.scoreboard-players")); score.setScore(getPlayers().size()); } } private void resetScoreboard() { if (objective != null) { objective.unregister(); } if (scoreboard != null) { scoreboard = null; } } public void deletePlayer(final GamePlayer gplayer, boolean playerQuit, boolean hardQuit) { if (gPlayers.contains(gplayer)) { gPlayers.remove(gplayer); kills.remove(gplayer); } if (playerQuit) { playerQuit(gplayer); } if (!hardQuit) { preparePlayerForExit(gplayer); } if (gameState == GameState.PREGAME || gameState == GameState.PLAYING) { if (SkyWarsReloaded.getCfg().bungeeEnabled() && !shutdown) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode() && !shutdown) { SkyWarsReloaded.getGC().updateSign(gameNumber); } } if (SkyWarsReloaded.getCfg().bungeeEnabled() && !shutdown && !hardQuit) { if (gplayer.getP() != null) { gplayer.getP().teleport(SkyWarsReloaded.getCfg().getSpawn(), TeleportCause.PLUGIN); SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { SkyWarsReloaded.getInvC().restoreInventory(gplayer.getP()); BungeeUtil.connectToServer(gplayer.getP(), SkyWarsReloaded.getCfg().getLobbyServer()); } }, 5); } } else { if (gplayer.getP() != null) { gplayer.getP().teleport(SkyWarsReloaded.getCfg().getSpawn(), TeleportCause.PLUGIN); if (!shutdown) { SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { if (gplayer.getP() != null) { SkyWarsReloaded.getInvC().restoreInventory(gplayer.getP()); SkyWarsReloaded.getScore().getScoreboard(gplayer.getP()); } } }, 5); } } } if (gameState == GameState.PLAYING) { checkForWinner(); } } public void shutdown() { shutdown = true; } private void playerQuit(GamePlayer gPlayer) { gPlayer.setInGame(false); GamePlayer killer = gPlayer.getTagged().getPlayer(); if (gameState == GameState.PLAYING) { scoreboardData.put(gPlayer.getP().getName(), 0); updateScoreboard(); if (!gPlayer.isSpectating()) { if ((System.currentTimeMillis() - gPlayer.getTagged().getTime()) < 10000 && killer != gPlayer) { if (killer != gPlayer) { killer.setKills(killer.getKills() + 1); kills.put(killer, kills.get(killer) + 1); gPlayer.setDeaths(gPlayer.getDeaths() + 1); int killTotal = SkyWarsReloaded.getCfg().getKillValue(); if (killer.getP() != null) { if (killer.getP().hasPermission("swr.vip")) { killTotal = SkyWarsReloaded.getCfg().getKillValue() * SkyWarsReloaded.getCfg().getVIPMultiplier(); } else { killTotal = SkyWarsReloaded.getCfg().getKillValue(); } } killer.setScore(killer.getScore() + killTotal); gPlayer.setScore(gPlayer.getScore() - SkyWarsReloaded.getCfg().getDeathValue()); addBalance(killer, killTotal); removeBalance(gPlayer, SkyWarsReloaded.getCfg().getDeathValue()); sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("player", gPlayer.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .setVariable("killer", killer.getName()) .setVariable("killer_score", StringUtils.formatScore(killTotal)) .format("game.death.quit-while-tagged")); } } else { gPlayer.setScore(gPlayer.getScore() - SkyWarsReloaded.getCfg().getLeaveValue()); removeBalance(gPlayer, SkyWarsReloaded.getCfg().getLeaveValue()); sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("player", gPlayer.getName()) .setVariable("score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getLeaveValue())) .format("game.left-the-game")); } } } else if (gameState == GameState.PREGAME) { scoreboardData.remove(gPlayer.getP().getName()); updateScoreboard(); for (int spawn: availableSpawns.keySet()) { if (availableSpawns.get(spawn) == gPlayer) { availableSpawns.put(spawn, null); } } sendGameMessage(new Messaging.MessageFormatter() .withPrefix() .setVariable("number", "" + (gPlayers.size())) .setVariable("total", "" + numberOfSpawns) .setVariable("player", gPlayer.getName()) .format("game.lobby-leave")); playSound(SkyWarsReloaded.getCfg().getLeaveSound()); } } private void preparePlayerForExit(GamePlayer gplayer) { if (gplayer.getP() != null) { gplayer.setInGame(false); gplayer.setKitSelected(false); gplayer.getP().getInventory().clear(); gplayer.setOpVote(0); gplayer.setWeatherVote(0); gplayer.setTimeVote(0); gplayer.setJumpVote(0); gplayer.getP().setScoreboard(SkyWarsReloaded.get().getServer().getScoreboardManager().getNewScoreboard()); for (PotionEffect effect : gplayer.getP().getActivePotionEffects()) { gplayer.getP().removePotionEffect(effect.getType()); } gplayer.getP().setFireTicks(0); gplayer.setGame(-1); } } public Boolean playerExists(GamePlayer name) { for (GamePlayer gPlayer: gPlayers) { if (name.getUUID().toString().equalsIgnoreCase(gPlayer.getUUID().toString())) { return true; } } return false; } public ArrayList<GamePlayer> getPlayers() { ArrayList<GamePlayer> players = new ArrayList<GamePlayer>(); for (GamePlayer g: gPlayers) { players.add(g); } return players; } public ArrayList<GamePlayer> getSpectators() { ArrayList<GamePlayer> players = new ArrayList<GamePlayer>(); for (GamePlayer g: spectators) { players.add(g); } return players; } public void deleteGame() { SkyWarsReloaded.getWC().deleteWorld(mapName + "_" + gameNumber); deleteWorldGuardFolder(mapName + "_" + gameNumber); SkyWarsReloaded.getGC().deleteGame(gameNumber); } private void deleteWorldGuardFolder(String name) { File workingDirectory = new File(SkyWarsReloaded.get().getServer().getWorldContainer().getAbsolutePath()); workingDirectory = new File(workingDirectory, "/plugins/WorldGuard/worlds/"); File[] contents = workingDirectory.listFiles(); if (contents != null) { for (File file : contents) { if (!file.isDirectory() || !file.getName().matches(name)) { continue; } SkyWarsReloaded.getWC().deleteWorld(file); } } } public GameState getState() { return gameState; } public Boolean isFull() { if (gPlayers.size() >= numberOfSpawns) { return true; } else { return false; } } public void createSpawnPlatform() { for(int spawn : gameMap.getSpawns().keySet()) { int x = gameMap.getSpawns().get(spawn).getBlockX(); int y = gameMap.getSpawns().get(spawn).getBlockY(); int z = gameMap.getSpawns().get(spawn).getBlockZ(); mapWorld.getBlockAt(x, y, z).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 1, z + 1).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 1, z - 1).setType(Material.GLASS); mapWorld.getBlockAt(x + 1, y + 1, z).setType(Material.GLASS); mapWorld.getBlockAt(x - 1, y + 1, z).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 2, z + 1).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 2, z - 1).setType(Material.GLASS); mapWorld.getBlockAt(x + 1, y + 2, z).setType(Material.GLASS); mapWorld.getBlockAt(x - 1, y + 2, z).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 3, z + 1).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 3, z - 1).setType(Material.GLASS); mapWorld.getBlockAt(x + 1, y + 3, z).setType(Material.GLASS); mapWorld.getBlockAt(x - 1, y + 3, z).setType(Material.GLASS); mapWorld.getBlockAt(x, y + 4, z).setType(Material.GLASS); } } public void removeSpawnHousing() { for(int spawn : gameMap.getSpawns().keySet()) { int x = gameMap.getSpawns().get(spawn).getBlockX(); int y = gameMap.getSpawns().get(spawn).getBlockY(); int z = gameMap.getSpawns().get(spawn).getBlockZ(); mapWorld.getBlockAt(x, y, z).setType(Material.AIR); mapWorld.getBlockAt(x, y + 1, z + 1).setType(Material.AIR); mapWorld.getBlockAt(x, y + 1, z - 1).setType(Material.AIR); mapWorld.getBlockAt(x + 1, y + 1, z).setType(Material.AIR); mapWorld.getBlockAt(x - 1, y + 1, z).setType(Material.AIR); mapWorld.getBlockAt(x, y + 2, z + 1).setType(Material.AIR); mapWorld.getBlockAt(x, y + 2, z - 1).setType(Material.AIR); mapWorld.getBlockAt(x + 1, y + 2, z).setType(Material.AIR); mapWorld.getBlockAt(x - 1, y + 2, z).setType(Material.AIR); mapWorld.getBlockAt(x, y + 3, z + 1).setType(Material.AIR); mapWorld.getBlockAt(x, y + 3, z - 1).setType(Material.AIR); mapWorld.getBlockAt(x + 1, y + 3, z).setType(Material.AIR); mapWorld.getBlockAt(x - 1, y + 3, z).setType(Material.AIR); mapWorld.getBlockAt(x, y + 4, z).setType(Material.AIR); } } public enum GameState { PREGAME, PLAYING, ENDING, } public void setState(GameState gState) { gameState = gState; } public void onPlayerDeath(final GamePlayer target, final DamageCause dCause, final Location loc) { gPlayers.remove(target); kills.remove(target); scoreboardData.put(target.getP().getName(), 0); updateScoreboard(); preparePlayerForExit(target); if (SkyWarsReloaded.getCfg().spectatingEnabled()) { target.setSpectating(true); target.setSpecGame(gameNumber); } final Game game = this; SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { @Override public void run() { if (target.getP() != null) { SkyWarsReloaded.getNMS().respawnPlayer(target.getP()); } if (!SkyWarsReloaded.getCfg().spectatingEnabled()) { deletePlayer(target, false, false); } target.setDeaths(target.getDeaths() + 1); mapWorld.playEffect(loc, Effect.MOBSPAWNER_FLAMES, 4); if ((System.currentTimeMillis() - target.getTagged().getTime()) < 10000) { GamePlayer killer = target.getTagged().getPlayer(); if (killer != target) { killer.setKills(killer.getKills() + 1); if (kills.get(killer) != null) { kills.put(killer, kills.get(killer) + 1); } int killTotal = SkyWarsReloaded.getCfg().getKillValue(); if (killer.getP() != null) { if (killer.getP().hasPermission("swr.vip")) { killTotal = SkyWarsReloaded.getCfg().getKillValue() * SkyWarsReloaded.getCfg().getVIPMultiplier(); } else { killTotal = SkyWarsReloaded.getCfg().getKillValue(); } } killer.setScore(killer.getScore() + killTotal); target.setScore(target.getScore() - SkyWarsReloaded.getCfg().getDeathValue()); addBalance(killer, killTotal); removeBalance(target, SkyWarsReloaded.getCfg().getDeathValue()); target.setTagged(target); if (target.getP() != null) { target.getP().sendMessage(getDeathMessage(dCause, true, target, killer)); target.getP().playSound(target.getP().getLocation(), SkyWarsReloaded.getCfg().getDeathSound(), 1, 1); } sendGameMessage(getDeathMessage(dCause, true, target, killer)); playSound(SkyWarsReloaded.getCfg().getDeathSound()); } } else { target.setScore(target.getScore() - SkyWarsReloaded.getCfg().getDeathValue()); removeBalance(target, SkyWarsReloaded.getCfg().getDeathValue()); sendGameMessage(getDeathMessage(dCause, false, target, target)); playSound(SkyWarsReloaded.getCfg().getDeathSound()); } target.setGamesPlayed(target.getGamesPlayed() + 1); if (gameState == GameState.PREGAME || gameState == GameState.PLAYING) { if (SkyWarsReloaded.getCfg().bungeeEnabled() && !shutdown) { BungeeUtil.sendSignUpdateRequest(game); } if (SkyWarsReloaded.getCfg().signJoinMode() && !shutdown) { SkyWarsReloaded.getGC().updateSign(gameNumber); } } checkForWinner(); } }, 1); } public void checkForWinner() { if (gameState == GameState.PLAYING) { if (getPlayers().size() == 1) { gameState = GameState.ENDING; if (SkyWarsReloaded.getCfg().bungeeEnabled()) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode()) { SkyWarsReloaded.getGC().updateSign(gameNumber); } GamePlayer gPlayer = getPlayers().get(0); gPlayers.remove(gPlayer); kills.remove(gPlayer); preparePlayerForExit(gPlayer); gPlayer.setWins(gPlayer.getWins() + 1); gPlayer.setGamesPlayed(gPlayer.getGamesPlayed() + 1); playSound(SkyWarsReloaded.getCfg().getWinSound()); if (gPlayer.getP() != null) { Location loc = gPlayer.getP().getEyeLocation(); launchFireworkDisplay(mapWorld, loc); } int winTotal = SkyWarsReloaded.getCfg().getWinValue(); if (gPlayer.getP() != null) { if (gPlayer.getP().hasPermission("swr.vip")) { winTotal = SkyWarsReloaded.getCfg().getWinValue() * SkyWarsReloaded.getCfg().getVIPMultiplier(); } else { winTotal = SkyWarsReloaded.getCfg().getWinValue(); } } gPlayer.setScore(gPlayer.getScore() + winTotal); addBalance(gPlayer, winTotal); Bukkit.getServer().getPluginManager().callEvent(new GameEndEvent(gPlayer.getP(), mapName)); if (SkyWarsReloaded.getCfg().spectatingEnabled()) { if (gPlayer.getP() != null) { gPlayer.spectateMode(true, this, gPlayer.getP().getLocation(), shutdown); sendGameMessage(new Messaging.MessageFormatter().withPrefix() .setVariable("time", "" + SkyWarsReloaded.getCfg().getTimeAfterGame()) .format("game.gameEnding")); } SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { endGame(); } }, 20 * SkyWarsReloaded.getCfg().getTimeAfterGame()); } else { deletePlayer(gPlayer, false, false); endGame(); } if (SkyWarsReloaded.getCfg().WinBroadcastDisabled()) { sendGameMessage(new Messaging.MessageFormatter().setVariable("player", gPlayer.getName()) .withPrefix() .setVariable("player_score", StringUtils.formatScore(winTotal)) .setVariable("mapname", mapName) .format("game.win")); } else { for (GamePlayer gamePlayer: SkyWarsReloaded.getPC().getAll()) { if (gamePlayer.getP() != null) { gamePlayer.getP().sendMessage(new Messaging.MessageFormatter().setVariable("player", gPlayer.getName()) .withPrefix() .setVariable("player_score", StringUtils.formatScore(winTotal)) .setVariable("mapname", mapName) .format("game.win")); } } } } else if (getPlayers().size() < 1) { gameState = GameState.ENDING; if (SkyWarsReloaded.getCfg().bungeeEnabled()) { BungeeUtil.sendSignUpdateRequest(this); } if (SkyWarsReloaded.getCfg().signJoinMode()) { SkyWarsReloaded.getGC().updateSign(gameNumber); } if (SkyWarsReloaded.getCfg().spectatingEnabled()) { sendGameMessage(new Messaging.MessageFormatter().withPrefix() .setVariable("time", "" + SkyWarsReloaded.getCfg().getTimeAfterGame()) .format("game.gameEnding")); SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { endGame(); } }, 20 * SkyWarsReloaded.getCfg().getTimeAfterGame()); } else { endGame(); } } } } private void sendGameMessage(String message) { for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { gPlayer.getP().sendMessage(message); } } if (SkyWarsReloaded.getCfg().spectatingEnabled()) { for (GamePlayer spectator: getSpectators()) { if (spectator.getP() != null) { spectator.getP().sendMessage(message); } } } } public void playSound(Sound sound) { for (GamePlayer gamePlayer: getPlayers()) { if (gamePlayer.getP() != null) { gamePlayer.getP().playSound(gamePlayer.getP().getLocation(), sound, 1, 1); } } for (GamePlayer gamePlayer: getSpectators()) { if(!gPlayers.contains(gamePlayer)) { if (gamePlayer.getP() != null) { gamePlayer.getP().playSound(gamePlayer.getP().getLocation(), sound, 1, 1); } } } } private String getDeathMessage(DamageCause dCause, boolean withHelp, GamePlayer target, GamePlayer killer) { String first = ""; int killTotal = SkyWarsReloaded.getCfg().getKillValue(); if (killer.getP() != null) { if (killer.getP().hasPermission("swr.vip")) { killTotal = SkyWarsReloaded.getCfg().getKillValue() * SkyWarsReloaded.getCfg().getVIPMultiplier(); } else { killTotal = SkyWarsReloaded.getCfg().getKillValue(); } } String second = new Messaging.MessageFormatter() .setVariable("killer", killer.getName()) .setVariable("killer_score", StringUtils.formatScore(killTotal)) .format("game.death.killer-section"); if (dCause.equals(DamageCause.BLOCK_EXPLOSION) || dCause.equals(DamageCause.ENTITY_EXPLOSION)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.explosion"); } else if (dCause.equals(DamageCause.DROWNING)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.drowning"); } else if (dCause.equals(DamageCause.FIRE) || dCause.equals(DamageCause.FIRE_TICK)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.fire"); } else if (dCause.equals(DamageCause.ENTITY_ATTACK)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .setVariable("killer", killer.getName()) .setVariable("killer_score", StringUtils.formatScore(killTotal)) .format("game.death.pvp"); second = ""; } else if (dCause.equals(DamageCause.FALLING_BLOCK)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.falling-block"); } else if (dCause.equals(DamageCause.LAVA)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.lava"); } else if (dCause.equals(DamageCause.PROJECTILE)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .setVariable("killer", killer.getName()) .setVariable("killer_score", StringUtils.formatScore(killTotal)) .format("game.death.projectile"); second = ""; } else if (dCause.equals(DamageCause.SUFFOCATION)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.suffocation"); } else if (dCause.equals(DamageCause.VOID)) { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.void"); } else { first = new Messaging.MessageFormatter() .withPrefix() .setVariable("player", target.getName()) .setVariable("player_score", StringUtils.formatScore(-SkyWarsReloaded.getCfg().getDeathValue())) .format("game.death.general"); } if (withHelp) { return first + second; } else { return first + "!"; } } public int getGameNumber() { return gameNumber; } public int getNumberOfSpawns() { return numberOfSpawns; } public boolean containsPlayer(Player player) { for (GamePlayer gPlayer: gPlayers) { if (gPlayer.getP() == player) { return true; } } return false; } public World getMapWorld() { return mapWorld; } public void addSpectator(GamePlayer gPlayer) { spectators.add(gPlayer); } public Location getSpawn() { return specSpawn; } public String getMapName() { return mapName; } public Scoreboard getScoreboard() { return scoreboard; } public void launchFireworkDisplay(final World w, final Location loc) { Firework fw = (Firework) w.spawn(loc.clone().add(new Vector(getRandomNum(5, -5), 1, getRandomNum(5, -5))), Firework.class); FireworkMeta meta = fw.getFireworkMeta(); FireworkEffect effect = SkyWarsReloaded.getNMS().getFireworkEffect(getRandomColor(),getRandomColor(), getRandomColor(), getRandomColor(), getRandomColor(), getRandomType()); meta.addEffect(effect); meta.setPower(getRandomNum(4, 1)); fw.setFireworkMeta(meta); fireworksCount++; if (fireworksCount < ((SkyWarsReloaded.getCfg().getTimeAfterGame() - 5)*4)) { SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() { public void run() { launchFireworkDisplay(w, loc); } }, 5); } } public int getRandomNum(int max, int min) { Random rand = new Random(); int ii = min + rand.nextInt(((max - (min)) + 1)); return ii; } public Type getRandomType() { int type = getRandomNum(5, 1); switch (type) { case 1: return Type.STAR; case 2: return Type.CREEPER; case 3: return Type.BURST; case 4: return Type.BALL_LARGE; case 5: return Type.BALL; default: return Type.STAR; } } public Color getRandomColor() { int color = getRandomNum(17, 1); switch (color) { case 1: return Color.AQUA; case 2: return Color.BLACK; case 3: return Color.BLUE; case 4: return Color.FUCHSIA; case 5: return Color.GRAY; case 6: return Color.GREEN; case 7: return Color.LIME; case 8: return Color.MAROON; case 9: return Color.NAVY; case 10: return Color.OLIVE; case 11: return Color.ORANGE; case 12: return Color.PURPLE; case 13: return Color.RED; case 14: return Color.SILVER; case 15: return Color.TEAL; case 16: return Color.WHITE; case 17: return Color.YELLOW; default: return Color.RED; } } public void removeSpectator(GamePlayer gPlayer) { spectators.remove(gPlayer); if (SkyWarsReloaded.getCfg().bungeeEnabled()) { if (gPlayer.getP() != null) { gPlayer.spectateMode(false, this, SkyWarsReloaded.getCfg().getSpawn(), shutdown); BungeeUtil.connectToServer(gPlayer.getP(), SkyWarsReloaded.getCfg().getLobbyServer()); } } else { if (gPlayer.getP() != null) { gPlayer.spectateMode(false, this, SkyWarsReloaded.getCfg().getSpawn(), shutdown); } } if (gPlayer.getP() != null) { SkyWarsReloaded.getScore().getScoreboard(gPlayer.getP()); } } public void sendSpectatorMessage(Player player, String message) { GamePlayer sender = SkyWarsReloaded.getPC().getPlayer(player.getUniqueId()); int score = sender.getScore(); String sValue; if (score < 0) { sValue = ChatColor.RED + "(-" + score + ")"; } else { sValue = ChatColor.GREEN + "(+" + score + ")"; } String name = player.getDisplayName(); for (GamePlayer gPlayer: getSpectators()) { if (gPlayer.getP() != null) { gPlayer.getP().sendMessage(new Messaging.MessageFormatter() .setVariable("score", sValue) .setVariable("player", name) .setVariable("message", message) .format("spectatorchat")); } } } private void setTime() { String time = getTime(); World world = SkyWarsReloaded.get().getServer().getWorld(mapName + "_" + gameNumber); if (time.equalsIgnoreCase("dawn")) { world.setTime(0); } else if (time.equalsIgnoreCase("noon")) { world.setTime(6000); } else if (time.equalsIgnoreCase("dusk")) { world.setTime(12000); } else if (time.equalsIgnoreCase("midnight")) { world.setTime(18000); } } private String getTime() { int votesForDawn = 0; int votesForNoon = 0; int votesForDusk = 0; int votesForMidnight = 0; for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getTimeVote() == 1) { votesForDawn++; } else if (gPlayer.getTimeVote() == 2) { votesForNoon++; } else if (gPlayer.getTimeVote() == 3) { votesForDusk++; } else if (gPlayer.getTimeVote() == 4) { votesForMidnight++; } } if (votesForDawn >= votesForNoon && votesForDawn >= votesForDusk && votesForDawn >= votesForMidnight) { return "dawn"; } else if (votesForNoon >= votesForDusk && votesForNoon >= votesForMidnight) { return "noon"; } else if (votesForDusk >= votesForMidnight) { return "dusk"; } else { return "midnight"; } } private void setWeather() { String weather = getWeather(); final World world = SkyWarsReloaded.get().getServer().getWorld(mapName + "_" + gameNumber); if (weather.equalsIgnoreCase("sunny")) { world.setStorm(false); world.setWeatherDuration(Integer.MAX_VALUE); } else if (weather.equalsIgnoreCase("rain")) { world.setStorm(true); world.setWeatherDuration(Integer.MAX_VALUE); } else if (weather.equalsIgnoreCase("thunder storm")) { world.setStorm(true); world.setThundering(true); world.setThunderDuration(Integer.MAX_VALUE); world.setWeatherDuration(Integer.MAX_VALUE); thunderStorm = true; } else if (weather.equalsIgnoreCase("snow")) { for (int x = min; x < max; x++) { for (int z = min; z < max; z++) { world.setBiome(x, z, Biome.ICE_PLAINS); } } world.setStorm(true); world.setWeatherDuration(Integer.MAX_VALUE); List<Chunk> chunks = getChunks(); SkyWarsReloaded.getNMS().updateChunks(mapWorld, chunks); world.setStorm(true); world.setWeatherDuration(Integer.MAX_VALUE); } } private List<Chunk> getChunks() { int minX = min; int minZ = min; int maxX = max; int maxZ = max; int minY = 0; int maxY = 0; Block min = mapWorld.getBlockAt(minX, minY, minZ); Block max = mapWorld.getBlockAt(maxX, maxY, maxZ); Chunk cMin = min.getChunk(); Chunk cMax = max.getChunk(); List<Chunk> chunks = new ArrayList<Chunk>(); for(int cx = cMin.getX(); cx < cMax.getX(); cx++) { for(int cz = cMin.getZ(); cz < cMax.getZ(); cz++) { Chunk currentChunk = mapWorld.getChunkAt(cx, cz); chunks.add(currentChunk); } } return chunks; } private String getWeather() { int votesForSunny = 0; int votesForRain = 0; int votesForThunder = 0; int votesForSnow = 0; for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getWeatherVote() == 1) { votesForSunny++; } else if (gPlayer.getWeatherVote() == 2) { votesForRain++; } else if (gPlayer.getWeatherVote() == 3) { votesForThunder++; } else if (gPlayer.getWeatherVote() == 4) { votesForSnow++; } } if (votesForSunny >= votesForRain && votesForSunny >= votesForThunder && votesForSunny >= votesForSnow) { return "sunny"; } else if (votesForRain >= votesForThunder && votesForRain >= votesForSnow) { return "rain"; } else if (votesForThunder >= votesForSnow) { return "thunder storm"; } else { return "snow"; } } private void setJump() { String jump = getJump(); if (jump.equalsIgnoreCase("normal")) { } else if (jump.equalsIgnoreCase("high jump")) { for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { gPlayer.getP().addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, SkyWarsReloaded.getCfg().getHighJumpValue())); } } } else if (jump.equalsIgnoreCase("super jump")) { for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { gPlayer.getP().addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, SkyWarsReloaded.getCfg().getSuperJumpValue())); } } } else if (jump.equalsIgnoreCase("god jump")) { for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getP() != null) { gPlayer.getP().addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, SkyWarsReloaded.getCfg().getGodJumpValue())); } } } } private String getJump() { int votesForNormal = 0; int votesForHigh = 0; int votesForSuper = 0; int votesForGod = 0; for (GamePlayer gPlayer: getPlayers()) { if (gPlayer.getJumpVote() == 1) { votesForNormal++; } else if (gPlayer.getJumpVote() == 2) { votesForHigh++; } else if (gPlayer.getJumpVote() == 3) { votesForSuper++; } else if (gPlayer.getJumpVote() == 4) { votesForGod++; } } if (votesForNormal >= votesForHigh && votesForNormal >= votesForSuper && votesForNormal >= votesForGod) { return "normal"; } else if (votesForHigh >= votesForSuper && votesForHigh >= votesForGod) { return "high jump"; } else if (votesForSuper >= votesForGod) { return "super jump"; } else { return "god jump"; } } private void removeBalance(GamePlayer p, int x) { if (SkyWarsReloaded.getCfg().usingExternalEcomony()) { SkyWarsReloaded.econ.withdrawPlayer(SkyWarsReloaded.get().getServer().getOfflinePlayer(p.getUUID()), x); } else { p.setBalance(p.getBalance() - x); } } private void addBalance(GamePlayer p, int x) { if (SkyWarsReloaded.getCfg().usingExternalEcomony()) { SkyWarsReloaded.econ.depositPlayer(SkyWarsReloaded.get().getServer().getOfflinePlayer(p.getUUID()), x); } else { p.setBalance(p.getBalance() + x); } } public int getPlayerSpawn(GamePlayer gPlayer) { for (int spawn: availableSpawns.keySet()) { if (availableSpawns.get(spawn) == gPlayer) { return spawn; } } return -1; } public void setGlass(Material color, GamePlayer gPlayer) { if (containsPlayer(gPlayer.getP()) && gameState == GameState.PREGAME) { Material material = color; int spawn = getPlayerSpawn(gPlayer); if (spawn != -1) { int x = gameMap.getSpawns().get(spawn).getBlockX(); int y = gameMap.getSpawns().get(spawn).getBlockY(); int z = gameMap.getSpawns().get(spawn).getBlockZ(); mapWorld.getBlockAt(x, y, z).setType(material); mapWorld.getBlockAt(x, y + 1, z + 1).setType(material); mapWorld.getBlockAt(x, y + 1, z - 1).setType(material); mapWorld.getBlockAt(x + 1, y + 1, z).setType(material); mapWorld.getBlockAt(x - 1, y + 1, z).setType(material); mapWorld.getBlockAt(x, y + 2, z + 1).setType(material); mapWorld.getBlockAt(x, y + 2, z - 1).setType(material); mapWorld.getBlockAt(x + 1, y + 2, z).setType(material); mapWorld.getBlockAt(x - 1, y + 2, z).setType(material); mapWorld.getBlockAt(x, y + 3, z + 1).setType(material); mapWorld.getBlockAt(x, y + 3, z - 1).setType(material); mapWorld.getBlockAt(x + 1, y + 3, z).setType(material); mapWorld.getBlockAt(x - 1, y + 3, z).setType(material); mapWorld.getBlockAt(x, y + 4, z).setType(material); } } } @SuppressWarnings("deprecation") public void setGlass(Material color, byte data, GamePlayer gPlayer) { if (containsPlayer(gPlayer.getP()) && gameState == GameState.PREGAME) { Material material = color; int spawn = getPlayerSpawn(gPlayer); if (spawn != -1) { int x = gameMap.getSpawns().get(spawn).getBlockX(); int y = gameMap.getSpawns().get(spawn).getBlockY(); int z = gameMap.getSpawns().get(spawn).getBlockZ(); mapWorld.getBlockAt(x, y, z).setType(material); mapWorld.getBlockAt(x, y, z).setData(data); mapWorld.getBlockAt(x, y + 1, z + 1).setType(material); mapWorld.getBlockAt(x, y + 1, z + 1).setData(data); mapWorld.getBlockAt(x, y + 1, z - 1).setType(material); mapWorld.getBlockAt(x, y + 1, z - 1).setData(data); mapWorld.getBlockAt(x + 1, y + 1, z).setType(material); mapWorld.getBlockAt(x + 1, y + 1, z).setData(data); mapWorld.getBlockAt(x - 1, y + 1, z).setType(material); mapWorld.getBlockAt(x - 1, y + 1, z).setData(data); mapWorld.getBlockAt(x, y + 2, z + 1).setType(material); mapWorld.getBlockAt(x, y + 2, z + 1).setData(data); mapWorld.getBlockAt(x, y + 2, z - 1).setType(material); mapWorld.getBlockAt(x, y + 2, z - 1).setData(data); mapWorld.getBlockAt(x + 1, y + 2, z).setType(material); mapWorld.getBlockAt(x + 1, y + 2, z).setData(data); mapWorld.getBlockAt(x - 1, y + 2, z).setType(material); mapWorld.getBlockAt(x - 1, y + 2, z).setData(data); mapWorld.getBlockAt(x, y + 3, z + 1).setType(material); mapWorld.getBlockAt(x, y + 3, z + 1).setData(data); mapWorld.getBlockAt(x, y + 3, z - 1).setType(material); mapWorld.getBlockAt(x, y + 3, z - 1).setData(data); mapWorld.getBlockAt(x + 1, y + 3, z).setType(material); mapWorld.getBlockAt(x + 1, y + 3, z).setData(data); mapWorld.getBlockAt(x - 1, y + 3, z).setType(material); mapWorld.getBlockAt(x - 1, y + 3, z).setData(data); mapWorld.getBlockAt(x, y + 4, z).setType(material); mapWorld.getBlockAt(x, y + 4, z).setData(data); } } } }